#include<iostream>
#include<iterator>
#include<list>
#include<algorithm>
using namespace std;
void Modify(int & lst){lst *= lst;}
int Square(int n){return n * n;}
int cube(int n){return n*n*n;}//
int Zero(){return 0;}
int One(){return 1;}
bool Even(int n){return !(n % 2);}
int main()
{
	int a[6] = {1,2,3,4,5,6};
	int b[6];
	copy(a,a+6,b);
	ostream_iterator<int>oit(cout,",");
	cout<<"1) ";copy(b,b+6,oit);cout<<endl;
	
	copy_backward(b,b+4,b+5);
	cout<<"2) ";copy(b,b+6,oit);cout<<endl;
	
	list<int>lst(5);
	transform(a,a+5,lst.begin(),Square);
	cout<<"3) ";copy(lst.begin(),lst.end(),oit);cout<<endl;
	transform(a,a+5,lst.begin(),cube);//
	cout<<"3.1) ";copy(lst.begin(),lst.end(),oit);cout<<endl;//
	
	cout<<"4) ";copy(a,a+6,oit);cout<<endl;
	
	swap_ranges(lst.begin(),lst.end(),b);
	cout<<"5) ";copy(lst.begin(),lst.end(),oit);cout<<endl;
	
	fill(b,b+6,0);
	fill_n(b+2,3,1);
	cout<<"6) ";copy(b,b+6,oit);cout<<endl;
	
	copy(a,a+6,b);
	generate(b,b+6,Zero);
	generate_n(b+1,3,One);
	cout<<"7) ";copy(b,b+6,oit);cout<<endl;
	
	replace(b,b+6,1,3);
	cout<<"8) ";copy(b,b+6,oit);cout<<endl;
	
	replace_if(b,b+6,Even,11);
	cout<<"9) ";copy(b,b+6,oit);cout<<endl;
	
	replace_copy(a,a+6,b,3,30);
	
	cout<<"10) ";copy(b,b+6,oit);cout<<endl;
	
	replace_copy_if(a,a+6,b,Even,7);
	
	cout<<"11) ";copy(b,b+6,oit);cout<<endl;
	
	return 0;
}